package models.common.entity;

import java.util.Date;
import java.util.Map;

import javax.persistence.Entity;

import play.db.jpa.Model;

import common.utils.StrUtil;

/**
 * 实体:用户的操作时间与记录
 *
 * @description 
 *
 * @author LiangQiongfeng
 * @createDate 2018年02月23日
 */
@Entity
public class t_event_user extends Model {

	/** 操作时间 */
	public Date time = new Date(); 

	/** 用户ID */
	public long user_id;
	
	/** 用户ip */
	public String ip ="";
	
	/** 操作类型 */
	private int item;
	
	/** 描述 */
	private String description;
	
	public Item getItem() {
		
		return Item.getEnum(this.item);
	}

	public String getDescription() {
		return description;
	}

	/**
	 * 设置description的内容(会同时设置操作类型)
	 *
	 * @param event
	 * @param param
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月17日
	 */
	public void setDescription(Event event, Map<String,String> param) {
		
		this.item = event.code;
		String descrip = StrUtil.replaceByMap(event.value, param);
		
		this.description = descrip;
	}

	/**
	 * 枚举:用户操作栏目
	 *
	 * @description 
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月17日
	 */
	public enum Item {
		
		//---------------------首页-------------
		/** 101:首页*/
		HOME(101,"首页"),

		//---------------------用户-账户首页-------------
		/** 201:用户登录 */
		LOGINING(201,"用户登录"),
		
		/** 202:用户注册 */
		REGIST(202,"用户注册"),
		
		/** 206:充值 */
		RECHARGE(206,"充值"),
		
		/** 207:提现 */
		WITHDRAW(207,"提现"),
		
		/** 208:修改头像 */
		UPDATEIMG(207,"修改头像 "),
		
		
		//---------------------交易管理-------------
		/** 301:登记应收账款信息*/
		REGISTER_RECEIVABLE_INFO(301,"登记应收账款信息"),
		
		/** 302:登记应付账款信息 */
		REGISTER_PAYABLE_INFO(302,"登记应付账款信息"),
		
		/**303：转开凭证*/
		TO_TICKETAWAY(303,"转开凭证"),
		
		/**304：授信额度申请*/
		ADD_CREDITLIMIT(304,"授信额度申请"),
		
		/**305：质押物登记*/
		PLEDGETICKET(305,"质押物登记"),
		
		/**306：挂牌融资*/
		ACCOUNTLOAN(306,"挂牌融资"),
		
		/**307：数字账款凭证融通*/
		TOLOANTICKETCREDIT(307,"数字账款凭证融通"),
		
		/**308：商票质押融通*/
		TOLOAN(308,"商票质押融通"),
		
		/**309：获取大数据智能分析报告*/
		ANALYSIS(309,"获取大数据智能分析报告"),
		
		/**311：获取上市公司数据分析服务费*/
		QUOTED_FEES(311,"获取上市公司数据分析服务费"),
		
		/**310：背书*/
		ENDORSE(310,"背书"),
		
		//-------------------账户中心------------
		/** 401:修改资料 */
		UPDATEDATA(401,"修改资料"),
		
		/** 402:修改邮箱 */
		UPDATEEMAIL(402,"修改邮箱"),
		
		/** 403:修改密码 */
		UPDATEPASSWORD(403,"修改密码"),
		
		/** 404:申请注销 */
		UPDATEUSERSTATUS(404,"申请注销")
		;
		
		public int code;
		public String value;
		private Item(int code, String value) {
			this.code = code;
			this.value = value;
		}
		
		public static Item getEnum(int code){
			Item[] types = Item.values();
			for (Item type: types) {
				if (type.code == code) {

					return type;
				}
			}
			
			return null;
		}
	}
	
	
	/**
	 * 枚举:会员操作事件
	 *
	 * @description 均为操作管理员的真实姓名
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月17日
	 */
	public enum Event {
		
		//---------------------首页-------------

		/** 101:退出系统 ( 退出系统  ) */
		LOGOUT(Item.HOME.code," 用户名为userName、登录IP为ip的用户退出系统 "),
		
		
		//---------------------用户-账户首页-------------
		/** 201:用户登录, description: 用户名为userName、登录IP为ip的用户进行一次登录*/
		LOGINING(Item.LOGINING.code,"用户名为userName、登录IP为ip的用户进行一次登录"),
		
		/** 202:用户注册,description: 用户名为userName、登录IP为ip的用户进行注册*/
		TO_REGIST(Item.REGIST.code,"用户名为userName、登录IP为ip的用户进行注册"),
		
		/** 206:充值 ,description:用户名为userName、登录IP为ip的用户进行充值,充值金额为account元*/
		RECHARGE(Item.RECHARGE.code,"用户名为userName、登录IP为ip的用户进行充值,充值金额为account元"),
		
		/** 207:提现 ,description：用户名为userName、登录IP为ip的用户进行提现,提现金额为account元*/
		WITHDRAW(Item.WITHDRAW.code,"用户名为userName、登录IP为ip的用户进行提现,提现金额为account元"),
		
		/** 208:修改头像 ,description:用户名为userName、登录IP为ip的用户进行修改头像 ,名称image_name*/
		UPDATEIMG(Item.UPDATEIMG.code,"用户名为userName、登录IP为ip的用户进行修改头像 ,名称image_name"),
		
		
		//---------------------交易管理-------------
		/** 301:登记应收账款信息,description：用户名为userName、登录IP为ip的用户进行登记应收账款信息*/
		REGISTER_RECEIVABLE_INFO(Item.REGISTER_RECEIVABLE_INFO.code,"用户名为userName、登录IP为ip的用户进行登记了一条应收账款信息"),
		
		/** 302:登记应付账款信息 ,description:用户名为userName、登录IP为ip的用户进行登记应付账款信息,债权人为companyName*/
		REGISTER_PAYABLE_INFO(Item.REGISTER_PAYABLE_INFO.code,"用户名为userName、登录IP为ip的用户进行登记了一条应付账款信息"),
		
		/** 302:确认应付账款信息 ,description：用户名为userName、登录IP为ip的用户对一条应付账款信息进行确认*/
		AFFIRM_PAYABLE_INFO(Item.REGISTER_PAYABLE_INFO.code,"用户名为userName、登录IP为ip的用户对一条应付账款信息进行确认"),
		
		/** 302:取消应收账款信息 ,description：用户名为userName、登录IP为ip的用户取消了一条应收账款信息登记*/
		CANCEL_RECEIVABLE_INFO(Item.REGISTER_PAYABLE_INFO.code,"用户名为userName、登录IP为ip的用户取消了一条应收账款信息登记"),
		
		/** 302:拒收应付账款信息 ,description：用户名为userName、登录IP为ip的用户拒绝对一条应付账款信息进行确认*/
		RESUSAL_PAYABLE_INFO(Item.REGISTER_PAYABLE_INFO.code,"用户名为userName、登录IP为ip的用户拒绝对一条应付账款信息进行确认"),
		
		/**303：转开凭证,description:用户名为userName、登录IP为ip的用户进行了一次转开凭证操作*/
		TO_TICKETAWAY(Item.TO_TICKETAWAY.code,"用户名为userName、登录IP为ip的用户进行了一次转开凭证操作"),
		
		/**303：接收转开凭证,description：用户名为userName、登录IP为ip的用户签收了转开凭证*/
		ACCEPT_TICKETAWAY(Item.TO_TICKETAWAY.code,"用户名为userName、登录IP为ip的用户接收了转开凭证"),
		
		/**303：撤销转开凭证申请,description：用户名为userName、登录IP为ip的用户撤销了转开凭证开出*/
		CANCEL_TICKETAWAY(Item.TO_TICKETAWAY.code,"用户名为userName、登录IP为ip的用户撤销了转开凭证开出"),
		
		/**303：拒收转开凭证,description：用户名为userName、登录IP为ip的用户拒绝签收转开凭证*/
		RESUSAL_TICKETAWAY(Item.TO_TICKETAWAY.code,"用户名为userName、登录IP为ip的用户拒绝签收转开凭证"),
		
		/**304：授信额度申请,description:用户名为userName、登录IP为ip的用户进行了一次授信额度申请*/
		ADD_CREDITLIMIT(Item.ADD_CREDITLIMIT.code,"用户名为userName、登录IP为ip的用户进行了一次授信额度申请"),
		
		/**304：授信额度审核,description：用户名为userName、登录IP为ip的用户对申请人的授信额度申请进行审核*/
		AUDiT_CREDITLIMIT(Item.ADD_CREDITLIMIT.code,"用户名为userName、登录IP为ip的用户对申请人的授信额度申请进行审核"),
		
		/**305：质押物登记,description:用户名为userName、登录IP为ip的用户申请质押物登记*/
		PLEDGETICKET(Item.PLEDGETICKET.code,"用户名为userName、登录IP为ip的用户申请质押物登记"),
		
		/**305：接收质押物登记,description：用户名为userName、登录IP为ip的用户接收了质押人为companyName的质押物登记*/
		ACCEPT_PLEDGETICKET(Item.PLEDGETICKET.code,"用户名为userName、登录IP为ip的用户接收了质押物登记"),
		
		/**305：撤销质押物登记,description：用户名为userName、登录IP为ip的用户撤销了商票质押*/
		CENCEl_PLEDGETICKET(Item.PLEDGETICKET.code,"用户名为userName、登录IP为ip的用户撤销了商票质押"),
		
		/**305：拒收质押物登记,description：用户名为userName、登录IP为ip的用户拒收了商票质押*/
		REVOCATE_PLEDGETICKET(Item.PLEDGETICKET.code,"用户名为userName、登录IP为ip的用户拒收了商票质押"),
		
		/**306：挂牌融资,description:用户名为userName、登录IP为ip的用户向放款单位companyName进行申请挂牌融资*/
		ACCOUNTLOAN(Item.ACCOUNTLOAN.code,"用户名为userName、登录IP为ip的用户向放款单位companyName进行申请挂牌融资"),
		
		/**306：摘牌收益,description:用户名为userName、登录IP为ip的用户通过了融资人挂牌融资申请，进行摘牌放款*/
		DELIST_ACCOUNTLOAN(Item.ACCOUNTLOAN.code,"用户名为userName、登录IP为ip的用户通过了融资人的挂牌融资申请，进行摘牌放款"),
		
		/**307：数字账款凭证融通,description：用户名为userName、登录IP为ip的用户进行数字账款凭证融通申请*/
		TO_LOANTICKETCREDIT(Item.TOLOANTICKETCREDIT.code,"用户名为userName、登录IP为ip的用户进行数字账款凭证融通申请"),
		
		/**307：通过数字账款凭证融通,description:用户名为userName、登录IP为ip的用户数字账款凭证融通申请*/
		PASS_LOANTICKETCREDIT(Item.TOLOANTICKETCREDIT.code,"用户名为userName、登录IP为ip的用户数字账款凭证融通申请"),
		
		/**307：撤销数字账款凭证融通,description:用户名为userName、登录IP为ip的用户撤销的数字账款凭证融通申请*/
		CANCEL_LOANTICKETCREDIT(Item.TOLOANTICKETCREDIT.code,"用户名为userName、登录IP为ip的用户撤销的数字账款凭证融通申请"),
		
		/**307：拒收数字账款凭证融通,description:用户名为userName、登录IP为ip的用户拒绝数字账款凭证融通申请*/
		RESUSAL_LOANTICKETCREDIT(Item.TOLOANTICKETCREDIT.code,"用户名为userName、登录IP为ip的用户拒绝数字账款凭证融通申请"),
		
		/**308：商票质押融通,description：用户名为userName、登录IP为ip的用户进行商票质押融通申请*/
		TOLOAN(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户进行商票质押融通申请"),
		
		/**308：放款人放款,description：用户名为userName、登录IP为ip的用户向进行融通放款*/
		LOAN(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户向进行融通放款"),
		
		/**308：融通人确认收到划款,description：用户名为userName、登录IP为ip的用户确认了划款*/
		ACCEPT_LOAN(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户确认了划款"),
		
		/**308：融通人还款,description：用户名为userName、登录IP为ip的用户进行融通还款*/
		REFUND(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户进行融通还款"),
		
		/**308：放款人确认了还款,description：用户名为userName、登录IP为ip的用户确认了融通还款*/
		ACCEPT_REFUND(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户确认了融通还款"),
		
		/**308：融通人发起托收,description：用户名为userName、登录IP为ip的用户发起托收请求*/
		COLLECTION(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户发起托收请求"),
		
		/**308：放款人确认托收,description：用户名为userName、登录IP为ip的用户确认了发起托收的请求*/
		ACCEPT_COLLECTION(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户确认了发起托收的请求"),
		
		/**308：通过商票质押融通,description:用户名为userName、登录IP为ip的用户商票质押融通申请*/
		PASS_LOAN(Item.TOLOAN.code,"用户名为userName、登录IP为ip的用户商票质押融通申请"),
		
		/**309：获取大数据智能分析报告，description:用户名为userName、登录IP为ip的用户购买了大数据智能分析报告*/
		BUY_ANALYSIS(Item.ANALYSIS.code,"用户名为userName、登录IP为ip的用户购买了大数据智能分析报告"),
		
		/**311：获取上市公司数据分析服务费，description:用户名为userName、登录IP为ip的用户购买了上市公司数据分析报告*/
		QUOTED_FEES(Item.QUOTED_FEES.code,"用户名为userName、登录IP为ip的用户购买了上市公司数据分析报告"),
		
		/**310：背书申请，description：用户名为userName、登录IP为ip的用户提交了被背书人的背书申请*/
		TO_ENDORSE(Item.ENDORSE.code,"用户名为userName、登录IP为ip的用户提交了被背书人的背书申请"),
		
		/**310：接收背书申请，description：用户名为userName、登录IP为ip的用户确认了背书人的背书申请*/
		RECEIVE_ENDORSE(Item.ENDORSE.code,"用户名为userName、登录IP为ip的用户确认了背书人的背书申请"),
		
		/**310：拒收背书申请，description：用户名为userName、登录IP为ip的用户进行了背书人的背书申请*/
		RESUSAL_ENDORSE(Item.ENDORSE.code,"用户名为userName、登录IP为ip的用户拒收了背书人的背书申请"),
		
		//-------------------账户中心------------
		/** 401:修改资料 ,description:用户名为userName、登录IP为ip的用户修改了dataName*/
		UPDATEDATA(Item.UPDATEDATA.code,"用户名为userName、登录IP为ip的用户修改了dataName"),
		
		/** 402:修改邮箱 ,description：用户名为userName、登录IP为ip的用户进行修改邮箱*/
		UPDATEEMAIL(Item.UPDATEEMAIL.code,"用户名为userName、登录IP为ip的用户修改了邮箱"),
		
		/** 403:修改密码 ,description:用户名为userName、登录IP为ip的用户进行修改密码*/
		UPDATEPASSWORD(Item.UPDATEPASSWORD.code,"用户名为userName、登录IP为ip的用户修改了密码"),
		
		/** 404:申请注销 ,description：用户名为userName、登录IP为ip的用户进行申请注销*/
		UPDATEUSERSTATUS(Item.UPDATEUSERSTATUS.code,"用户名为userName、登录IP为ip的用户申请了注销")
		;
		
		public int code;
		public String value;
		
		private Event(int code, String value) {
			this.code = code;
			this.value = value;
		}
		
		public static Event getEnum(int code){
			Event[] types = Event.values();
			for (Event type: types) {
				if (type.code == code) {

					return type;
				}
			}
			
			return null;
		}
	}
	
}
